package edu.gatech.cs2340.teamrocket.model;

import java.util.List;
import edu.gatech.cs2340.teamrocket.model.environment.Season;
import edu.gatech.cs2340.teamrocket.model.environment.Time;
import edu.gatech.cs2340.teamrocket.model.environment.Weather;
import edu.gatech.cs2340.teamrocket.model.item.Item;
import edu.gatech.cs2340.teamrocket.model.job.Job;
import edu.gatech.cs2340.teamrocket.model.map.Location;
import edu.gatech.cs2340.teamrocket.model.storage.BasicStorage;
import edu.gatech.cs2340.teamrocket.model.storage.Backpack;
import edu.gatech.cs2340.teamrocket.model.storage.ShopInventory;
import edu.gatech.cs2340.teamrocket.model.pokemon.Pokemon;

/**
 * Interface for the Model facade class.
 *
 * @author Joe Tacheron
 */
public interface ModelInterface {

    /*****************************************
     *                SETTERS                *
     *****************************************/

    // Team

    public void namePokemon(int i, String name);

    public void setTeamSpeed(int speed);

    public void setTeamRations(int rations);

    public void nameTrainer(String n);

    public void setTrainerJob(Job j);

    // Stats

    public void incTurn();

    public void incScore(long amount);

    public void setIP(String ip);

    public void setUsername(String user);

    public void setPassword(String pass);

    // Environment

    public void incDay(int step);

    public void changeWeather();

    // Map

    public void setDistTravel(int distTravel);

    // Inventory

    @Deprecated
    public void setInventory(BasicStorage bs);

    @Deprecated
    public void removeItem(Item i);

    @Deprecated
    public void removeItem(Item i, int q);

    @Deprecated
    public void deductMoney(int q);

    public void clearInventory();

    // updates

    public void addUpdates(List<String> list);

    /*****************************************
     *                GETTERS                *
     *****************************************/

    // Team

    public List<Pokemon> getPokemon();

    public int getTeamSpeed();

    public int getTeamRations();

    public String getTrainerName();

    public Job getTrainerJob();

    public boolean teamIsFainted();

    public String wagonToHTML();

    // Stats

    public int getTurn();

    public long getScore();

    public String getIP();

    public String getUsername();

    public String getPassword();

    public String statsToHTML();

    //Environment

    public int getDay();

    public Season getSeason();

    public Weather getWeather();

    public Time getTime();

    public int getMaxWagonSpeed();

    public String environmentToHTML();

    // Map

    public Location moveForward(int dist);

    public boolean isAtEndOfMap();

    public int getDistanceTraveled();

    public Location getCurrentLocation();

    public boolean hasLocalShop();

    public ShopInventory getLocalShop();

    public List<Location> getAllLocations();

    public String mapToHTML();

    // Inventory

    public int getBackpackQuantity(Item i);

    public boolean backpackContains(Item i);

    public double getBackpackMoney();

    public double getBackpackAvailableWeight();

    public Backpack getBackpack();

    @Deprecated
    public BasicStorage cloneBackpack();

    public String backpackToHTML();

    // updates

    public List<String> getUpdates();
}
